package net.net23.sysdent;

import java.awt.Color;

import javax.swing.JTextField;

public class JNumberTextField extends JTextField {

	private static final long serialVersionUID = -2920248033003660822L;

	public static final byte TYPE_INTEGER = 0;
	public static final byte TYPE_FLOAT = 1;
	public static final byte TYPE_LONG = 2;
	public static final byte TYPE_DOUBLE = 3;

	private byte type;

	public JNumberTextField() {
		super();
		type = TYPE_INTEGER;
	}

	public JNumberTextField(byte type) {
		super();
		this.type = type;
	}

	/**
	 * Valida si el campo es valido según el tipo de número definido, además
	 * cambia el fondo del campo de texto según sea el caso: Rojo: Número
	 * Inválido. Blanco: Número Valido.
	 */
	public boolean isValidValue() {
		try {
			validateSwitchType();
			setBackground(Color.WHITE);
			return true;
		} catch (NumberFormatException nfe) {
			setBackground(new Color(0XFF9999));
			return false;
		}
	}

	/**
	 * Valida el contenido del campo de texto según sea el typo definido, por
	 * defecto es entero.
	 */
	private void validateSwitchType() throws NumberFormatException {
		switch (type) {
		case TYPE_FLOAT:
			Float.parseFloat(getText());
			break;
		case TYPE_LONG:
			Long.parseLong(getText());
			break;
		case TYPE_DOUBLE:
			Double.parseDouble(getText());
			break;
		case TYPE_INTEGER:
		default:
			Integer.parseInt(getText());
			break;
		}
	}

}
